import { IElTableColumn, IElButton } from '@/types/element-plus'

export type TableColumnsProps = IElTableColumn['$props'] & {
  sortable?: boolean // 排序
  prop: string // 数据键
  img?: boolean // 图片字段
  visible?: boolean // 控制显示隐藏
  component?: any // 动态组件
  attr?: (row: any) => any // 动态组件属性
  event?: (row: any) => any // 动态组件事件
  formatter?: (row: any, item?: TableColumnsProps) => string // 文本格式化函数
  asyncFormat?: (row: any, item?: TableColumnsProps) => void // 异步数据处理函数
}

export interface MenuProps {
  name: string // 名称
  type?: IElButton['$props']['type'] // 类型
  color?: string // 颜色
  event: string // 事件名称
  role?: string // 权限
  visible?: ((row: any) => boolean) | boolean // 控制显示隐藏
}

export interface TableFormPropsType {
  // 左侧自定义标题
  title?: string
  // 是否开启工具栏
  tools?: boolean
  // 是否自动执行load
  autoLoad?: boolean
  // 列数据
  columns?: TableColumnsProps[]
  // 菜单
  menus?: MenuProps[]
  // 菜单展示最大数量
  menuMaxNum?: number
  // 表单数据
  model?: {[key: string]: any}
  // 加载事件
  load?: (form: any) => Promise<any>
  // 开启更多选项
  more?: boolean
  // 是否默认显示更多
  defaultMore?: boolean
  // 开启多选
  selection?: boolean
  // 高亮选中
  highlight?: boolean
  // 开启序号
  index?: boolean
  // 表格数据显示默认值
  defaultTableText?: string
  // 表单内联
  formInline?: boolean
  // 表单展示行
  rows?: number
  // 表单行高
  rowHeight?: number
  // 表格高度
  height?: string | number
  // 表单label宽度
  labelWidth?: number | string
  // 是否开启翻页
  page?: boolean
  // 取消内部级联处理，用于后端处理好级联数据使用，内部会直接判定为是级联数据
  noChildren?: boolean
  // 默认展开菜单
  defaultExpandAll?: boolean
  // 是否开启卡片模式切换
  isCard?: boolean
  // 默认显示布局模式
  defaultType?: 'table' | 'card'
}
